Postfix Mailserver mit Dovecot und Rspamd
Vorbereitungen
Alle Postfächer gehören virtuellen Benutzern. Um Postfächer zu verwalten, benötigen wir einen Systembenutzer, der Eigentümer aller Postfächer ist. Diesen Benutzer vmail
erstellen wir wie folgt.
groupadd -g 5000 vmail
useradd -u 5000 -g vmail -s /usr/sbin/nologin -d /var/mail/vmail -m vmail
PostfixAdmin installieren
Da PostfixAdmin eine PHP-Anwendung ist, ist ein Webserver erforderlich. Wir werden Apache2 mit PHP8.2 und MariaDB verwenden. Die benötigten PHP Pakete installieren wir wie folgt.
apt install mariadb-server php-fpm php-cli php-imap php-json php-mysql php-opcache php-mbstring php-readline redis-server
Nun erstellen wir uns eine MySQL Datenbank postfixadmin und einen dazugehörigen Benutzer postfixadmin. Als Platzhalter your_secret_password
muss natürlich das echte Passwort rein.
mysql -u root -p
CREATE DATABASE postfixadmin;
GRANT ALL ON postfixadmin.* TO 'postfixadmin'@'localhost' IDENTIFIED BY 'your_secret_password';
FLUSH PRIVILEGES;
EXIT;
Nun laden wir uns PostfixAdmin herunter und installieren es wie folgt.
cd /var/www/
wget https://github.com/postfixadmin/postfixadmin/archive/refs/tags/postfixadmin-3.3.13.tar.gz
tar xzf postfixadmin-3.3.13.tar.gz && rm postfixadmin-3.3.13.tar.gz
mv postfixadmin-postfixadmin-3.3.13 postfixadmin-3.3.13
ln -s postfixadmin-3.3.13 postfixadmin
mkdir -p postfixadmin/templates_c
Dann erstellen wir uns unsere Konfiguration für PostfixAdmin. Dabei müssen wir your_secret_password
wieder mit dem Passwort des Datenbank Benutzer ersetzen. Auch example.com
ersetzen wir durch unsere Domain.
cat <<CONF >>postfixadmin/config.local.php
<?php
$CONF['configured'] = true;
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfixadmin';
$CONF['database_password'] = 'your_secret_password';
$CONF['database_name'] = 'postfixadmin';
$CONF['default_aliases'] = array (
'abuse' => 'abuse@example.com',
'hostmaster' => 'hostmaster@example.com',
'postmaster' => 'postmaster@example.com',
'webmaster' => 'webmaster@example.com'
);
$CONF['fetchmail'] = 'NO';
$CONF['show_footer_text'] = 'NO';
$CONF['quota'] = 'YES';
$CONF['domain_quota'] = 'YES';
$CONF['quota_multiplier'] = '1024000';
$CONF['used_quotas'] = 'YES';
$CONF['new_quota_table'] = 'YES';
$CONF['aliases'] = '0';
$CONF['mailboxes'] = '0';
$CONF['maxquota'] = '0';
$CONF['domain_quota_default'] = '0';
?>
CONF
Nun führen wir folgendes Skript aus um das Datenbankschema zu installieren.
php /var/www/postfixadmin/public/upgrade.php
Da die Datenbank nun fertig ist, ist es möglich, den ersten Superadmin admin über die CLI-Tools zu erstellen.
bash /var/www/postfixadmin/scripts/postfixadmin-cli admin add
Als Letzen Schritt erstellen wir uns einen VirtualHost wo wir als DocumentRoot /var/www/postfixadmin/public
verwenden.
Postfix & Dovecot installieren
Als erstes installieren wir die benötigten Pakete.
apt install postfix postfix-mysql dovecot-imapd dovecot-lmtpd dovecot-pop3d dovecot-mysql redis-tools
Nun erstellen wir ein Verzeichnis /etc/postfix/sql
wo wir die SQL Querys für Postfix speichern.
mkdir -p /etc/postfix/sql
Nun erstellen wir uns mysql_virtual_domains_maps.cf
. Das Passwort your_secret_password
muss natürlich wieder mit dem des Datenbank Benutzers ersetzt werden.
cat << SQL >> /etc/postfix/sql/mysql_virtual_domains_maps.cf
user = postfixadmin
password = your_secret_password
hosts = 127.0.0.1
dbname = postfixadmin
query = SELECT domain FROM domain WHERE domain='%s' AND active = '1'
SQL
Als nächstes erstellen wir uns mysql_virtual_alias_maps.cf
. Das Passwort your_secret_password
muss natürlich wieder mit dem des Datenbank Benutzers ersetzt werden.
cat << SQL >> /etc/postfix/sql/mysql_virtual_alias_maps.cf
user = postfixadmin
password = your_secret_password
hosts = 127.0.0.1
dbname = postfixadmin
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
SQL
Als nächstes erstellen wir uns mysql_virtual_alias_domain_catchall_maps.cf
. Das Passwort your_secret_password
muss natürlich wieder mit dem des Datenbank Benutzers ersetzt werden.
cat << SQL >> /etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf
user = postfixadmin
password = your_secret_password
hosts = 127.0.0.1
dbname = postfixadmin
query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'
SQL
Als nächstes erstellen wir uns mysql_virtual_alias_domain_maps.cf
. Das Passwort your_secret_password
muss natürlich wieder mit dem des Datenbank Benutzers ersetzt werden.
cat << SQL >> /etc/postfix/sql/mysql_virtual_alias_domain_maps.cf
user = postfixadmin
password = your_secret_password
hosts = 127.0.0.1
dbname = postfixadmin
query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('%u', '@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'
SQL
Als nächstes erstellen wir uns mysql_virtual_mailbox_maps.cf
. Das Passwort your_secret_password
muss natürlich wieder mit dem des Datenbank Benutzers ersetzt werden.
cat << SQL >> /etc/postfix/sql/mysql_virtual_mailbox_maps.cf
user = postfixadmin
password = your_secret_password
hosts = 127.0.0.1
dbname = postfixadmin
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'
SQL
Als nächstes erstellen wir uns mysql_virtual_alias_domain_mailbox_maps.cf
. Das Passwort your_secret_password
muss natürlich wieder mit dem des Datenbank Benutzers ersetzt werden.
cat << SQL >> /etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf
user = postfixadmin
password = your_secret_password
hosts = 127.0.0.1
dbname = postfixadmin
query = SELECT maildir FROM mailbox,alias_domain WHERE alias_domain.alias_domain = '%d' and mailbox.username = CONCAT('%u', '@', alias_domain.target_domain) AND mailbox.active = 1 AND alias_domain.active='1'
SQL
Sobald die MySQL-Konfigurationsdateien erstellt sind, aktualisieren Sie die Konfiguration von Postfix.
postconf -e "virtual_mailbox_domains = mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf"
postconf -e "virtual_alias_maps = mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf, mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf, mysql:/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf"
postconf -e "virtual_mailbox_maps = mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf, mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf"
Hinweis
Mit dem postconf
Befehl können Sie die tatsächliche Konfiguration anzeigen, Konfigurationswerte ändern oder andere Konfigurationsinformationen zum Postfix-Mailsystem anzeigen.
Die Lieferung vor Ort erfolgt durch Dovecot. Es nimmt E-Mails von einem MTA (Postfix) entgegen und stellt sie an das Postfach eines lokalen Benutzers zu.
postconf -e "virtual_transport = lmtp:unix:private/dovecot-lmtp"
Die TLS-Parameter konfigurieren wir mithilfe des Let's encrypt SSL-Zertifikats. Der Pfad zu den Zertifikaten muss ggf. angepasst werden.
postconf -e 'smtp_tls_security_level = may'
postconf -e 'smtpd_tls_security_level = may'
postconf -e 'smtp_tls_note_starttls_offer = yes'
postconf -e 'smtpd_tls_loglevel = 1'
postconf -e 'smtpd_tls_received_header = yes'
postconf -e 'smtpd_tls_cert_file = /etc/apache2/custom.d/certs.d/tuxnet24.de/fullchain.pem'
postconf -e 'smtpd_tls_key_file = /etc/apache2/custom.d/certs.d/tuxnet24.de/privkey.pem'
Nun konfigurieren wir die SMTP-Einstellungen zum authentifizierten.
postconf -e 'smtpd_sasl_type = dovecot'
postconf -e 'smtpd_sasl_path = private/auth'
postconf -e 'smtpd_sasl_local_domain ='
postconf -e 'smtpd_sasl_security_options = noanonymous'
postconf -e 'broken_sasl_auth_clients = yes'
postconf -e 'smtpd_sasl_auth_enable = yes'
postconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination'
Nun aktivieren wir die TLS/SSL- und Submission Ports in der Postfix-Konfigurationsdatei. Dazu öffnen wir die Datei /etc/postfix/master.cf
mit einem Texteditor und kommentieren die Abschnitte submission
und smtps
wie folgt aus. Wir müssen dabei sicherstellen, dass vor dem -o
ein erforderliches Leerzeichen steht.
submission inet n - y - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
# -o smtpd_reject_unlisted_recipient=no
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
# -o smtpd_helo_restrictions=$mua_helo_restrictions
# -o smtpd_sender_restrictions=$mua_sender_restrictions
# -o smtpd_recipient_restrictions=
# -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING
smtps inet n - y - - smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
# -o smtpd_reject_unlisted_recipient=no
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
# -o smtpd_helo_restrictions=$mua_helo_restrictions
# -o smtpd_sender_restrictions=$mua_sender_restrictions
# -o smtpd_recipient_restrictions=
# -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING
Nun starten wir den Postfix neu, damit die Änderungen wirksam werden.
systemctl restart postfix
Nun bearbeiten wir die Datei /etc/dovecot/conf.d/10-mail.conf
und tragen folgende erforderliche Informationen ein.
...
mail_location = maildir:/var/mail/vmail/%d/%n
...
mail_uid = vmail
mail_gid = vmail
...
first_valid_uid = 5000
last_valid_uid = 5000
...
mail_privileged_group = mail
...
mail_plugins = quota
...
Dann ändern wir die Informationen in der Datei /etc/dovecot/conf.d/10-auth.conf
wie folgt.
...
disable_plaintext_auth = yes
...
auth_mechanisms = plain login
...
#!include auth-system.conf.ext
!include auth-sql.conf.ext
...
Dann bearbeiten wir die Datei /etc/dovecot/conf.d/10-master.conf
wie folgt.
...
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
mode = 0600
user = postfix
group = postfix
}
...
}
...
service auth {
...
unix_listener auth-userdb {
mode = 0600
user = vmail
group = vmail
}
...
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
...
}
...
service auth-worker {
user = vmail
}
...
service dict {
unix_listener dict {
mode = 0660
user = vmail
group = vmail
}
}
...
Dann bearbeiten wir die Datei /etc/dovecot/conf.d/10-ssl.conf
wie folgt. Wichtig! Der Pfad muss zu den Zertifikaten muss angepasst werden.
...
ssl = yes
...
ssl_cert = </etc/letsencrypt/live/mail.example.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.example.com/privkey.pem
ssl_dh = </etc/ssl/certs/dhparam.pem
...
ssl_cipher_list = EECDH+AES:EDH+AES+aRSA
...
ssl_prefer_server_ciphers = yes
...
Dann fügen wir in der Datei die folgende Zeile hinzu/etc/dovecot/conf.d/20-imap.conf
...
protocol imap {
postmaster_address = postmaster@example.com
mail_plugins = $mail_plugins
}
...
Dann fügen wir in der Datei einen Spam-Ordner hinzu /etc/dovecot/conf.d/15-mailboxes.conf
...
mailbox Drafts {
special_use = \Drafts
}
mailbox Spam {
special_use = \Junk
auto = subscribe
}
mailbox Junk {
special_use = \Junk
}
...
Nun konfigurieren wir Dovecot so, dass es eine Verbindung zur MySQL-Datenbank herstellt, um die Kontingente entweder pro Domäne oder pro Benutzer zu verwalten. Es wird eine Benachrichtigung per E-Mail gesendet, sobald das Postfach eines Benutzers einen bestimmten Sättigungsgrad erreicht hat. Daher bearbeiten wir die Datei /etc/dovecot/conf.d/90-quota.conf
wie folgt.
quota = dict:User quota::proxy::sqlquota
quota_rule = *:storage=5GB
quota_rule2 = Trash:storage=+100M
quota_grace = 10%%
quota_exceeded_message = Quota exceeded, please contact your system administrator.
quota_warning = storage=100%% quota-warning 100 %u
quota_warning2 = storage=95%% quota-warning 95 %u
quota_warning3 = storage=90%% quota-warning 90 %u
quota_warning4 = storage=85%% quota-warning 85 %u
}
service quota-warning {
executable = script /usr/local/bin/quota-warning.sh
user = vmail
unix_listener quota-warning {
group = vmail
mode = 0660
user = vmail
}
}
dict {
sqlquota = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext
Zuerst müssen wir sicherstellen, dass Ihre MySQL-Anmeldeinformationen korrekt sind, um dann die Datei /etc/dovecot/dovecot-dict-sql.conf.ext
wie folgt zu bearbeiten.
...
connect = host=127.0.0.1 dbname=postfixadmin user=postfixadmin password=your_secret_password
...
map {
pattern = priv/quota/storage
table = quota2
username_field = username
value_field = bytes
}
map {
pattern = priv/quota/messages
table = quota2
username_field = username
value_field = messages
}
...
# map {
# pattern = shared/expire/$user/$mailbox
# table = expires
# value_field = expire_stamp
#
# fields {
# username = $user
# mailbox = $mailbox
# }
# }
...
Danach erstellen wir das folgende Skript, welches eine Warnung an einen Benutzer sendet, der die Kapazitätsgrenzen seines Postfachs erreicht hat. Wir bearbeiten die Datei /usr/local/bin/quota-warning.sh
wie folgt.
#!/bin/sh
PERCENT=$1
USER=$2
cat << EOF | /usr/lib/dovecot/dovecot-lda -d $USER -o "plugin/quota=dict:User quota::noenforcing:proxy::sqlquota"
From: postmaster@example.com
Subject: Quota warning
Your mailbox is $PERCENT% full. Do not forget to make a backup of old messages to remain able to receive mails.
EOF
Dann setzen wir noch das Ausführung Bit.
chmod +x /usr/local/bin/quota-warning.sh
Und starten Sie Dovecot neu.
systemctl restart dovecot
Rspamd installieren
Zuerst fügen wir das Repository von Rspamd mit dem folgenden Befehl zu Ihren apt-Quellen hinzu.
wget -O- https://rspamd.com/apt-stable/gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/rspamd.gpg > /dev/null
echo "deb [signed-by=/etc/apt/keyrings/rspamd.gpg] http://rspamd.com/apt-stable/ $(lsb_release -cs) main" | tee -a /etc/apt/sources.list.d/rspamd.list
Dann aktualisieren wir den Apt-Cache und installieren rspamd wie folgt.
apt update && apt install rspamd
Die Datei /etc/rspamd/local.d/worker-normal.inc
enthält Informationen über den Port, auf dem Rspamd lauscht. Der Standardport ist 11333. Wir binden ihn an unseren lokalen Host, indem wir der Datei die folgende Zeile hinzufügen.
bind_socket = "127.0.0.1:11333";
Nun konfigurieren wir einen Proxy zwischen Postfix und Rspamd, der Port 11332 überwacht und als Milter für die Kommunikation zwischen den beiden Tools fungiert. Wie bearbeiten die Datei/etc/rspamd/local.d/worker-proxy.inc
wie folgt.
bind_socket = "127.0.0.1:11332";
Nun legen wir ein Passwort für den Worker fest. Um ein verschlüsseltes Passwort zu generieren, führen wir den folgenden Befehl aus.
rspamadm pw --encrypt -p your_secret_password
$2$93qin9nkifzjpr7taqhs9guua888tnny$dnys6um6xm1gb1amgnz9hocuz7grxuk5z9yjw87psrk6yu641oiy
Dann bearbeiten wir die Datei /etc/rspamd/local.d/worker-controller.inc
und geben das verschlüsselte Passwort ein.
password = "$2$93qin9nkifzjpr7taqhs9guua888tnny$dnys6um6xm1gb1amgnz9hocuz7grxuk5z9yjw87psrk6yu641oiy";
Nun konfigurieren wir Redis für die Verwendung mit rspamd, indem wir die Datei /etc/rspamd/local.d/classifier-bayes.conf
bearbeiten,
servers = "127.0.0.1";
backend = "redis";
Dann setzen wir die milter headers in der Datei /etc/rspamd/local.d/milter_headers.conf
wie folgt.
use = ["x-spamd-bar", "x-spam-level", "authentication-results"];
Nun können wir den rspamd Daemon neu starten.
systemctl restart rspamd
Nun erstellen wir uns einen VirtualHost Datei wie z.B. /etc/apache2/sites-available/rspamd.example.com.conf
. Dieser Schnipzel zeigt nur die Proxy Konfiguration des Apache Webservers. Zu beachten ist, dass <rspamd.example.com>
mit den korrekten Namen ausgetauscht wird.
<IfModule mod_proxy.c>
ProxyRequests Off
ProxyPreserveHost On
#RequestHeader unset Accept-Encoding
#RequestHeader set X-Forwarded-Proto "https"
#RequestHeader set X-Forwarded-Port "443"
<Proxy *>
Require all granted
</Proxy>
ProxyPass / http://localhost:11334/
ProxyPassReverse / http://localhost:11334/
ProxyPassReverseCookieDomain 127.0.0.1 <rspamd.example.com>
</IfModule>
Wir aktivieren nun die neue VirtualHost Datei und starten den Apache Webserver neu.
a2ensite rspamd.example.com.conf && systemctl restart apache2
Um Rspamd mit Postfix zu verwenden, muss die Konfiguration mit postconf wie folgt aktualisiert werden.
postconf -e "milter_protocol = 6"
postconf -e "milter_mail_macros = i {mail_addr} {client_addr} {client_name} {auth_authen}"
postconf -e "milter_default_action = accept"
postconf -e "smtpd_milters = inet:127.0.0.1:11332"
postconf -e "non_smtpd_milters = inet:127.0.0.1:11332"
Dann starten wir postfix neu, damit die Änderungen wirksam werden.
systemctl restart postfix
Sieve Filter für Dovecot installieren und einrichten
Dovecot ist bereits auf dem Server installiert, nun fügen wir das Sieve- Filtermodul hinzu und integrieren es in Rspamd.
apt install dovecot-sieve dovecot-managesieved
Danach öffnen wir die Datei /etc/dovecot/conf.d/20-lmtp.conf
und bearbeiten diese wie folgt.
...
protocol lmtp {
postmaster_address = postmaster@example.com
mail_plugins = $mail_plugins sieve
}
...
Dann öffnen wir die Datei /etc/dovecot/conf.d/20-imap.conf
und bearbeiten diese wie folgt.
...
protocol imap {
...
mail_plugins = $mail_plugins imap_quota imap_sieve
...
}
...
Nun bearbeiten wir die Datei /etc/dovecot/conf.d/20-managesieve.conf
wie folgt.
...
service managesieve-login {
inet_listener sieve {
port = 4190
}
}
...
service managesieve {
process_limit = 1024
}
...
Nun öffnen und bearbeiten wir die Datei /etc/dovecot/conf.d/90-sieve.conf
wie folgt.
plugin {
...
# sieve = file:~/sieve;active=~/.dovecot.sieve
sieve_plugins = sieve_imapsieve sieve_extprograms
sieve_before = /var/vmail/mail/sieve/global/spam-global.sieve
sieve = file:/var/vmail/mail/sieve/%d/%n/scripts;active=/var/vmail/mail/sieve/%d/%n/active-script.sieve
imapsieve_mailbox1_name = Spam
imapsieve_mailbox1_causes = COPY
imapsieve_mailbox1_before = file:/var/vmail/mail/sieve/global/report-spam.sieve
imapsieve_mailbox2_name = *
imapsieve_mailbox2_from = Spam
imapsieve_mailbox2_causes = COPY
imapsieve_mailbox2_before = file:/var/vmail/mail/sieve/global/report-ham.sieve
sieve_pipe_bin_dir = /usr/bin
sieve_global_extensions = +vnd.dovecot.pipe
....
}
Danach starten wir den Dovecot- Service neu und erstellen ein Verzeichnis für die Sieve-Skripte.
systemctl restart dovecot
mkdir -p /var/vmail/mail/sieve/global
Nun erstellen wir einen globalen Sieve- Filter in der Datei /var/vmail/mail/sieve/global/spam-global.sieve
. Damit werden als Spam markierte E-Mails direkt in den Spam-Ordner verschoben.
require ["fileinto","mailbox"];
if anyof(
header :contains ["X-Spam-Flag"] "YES",
header :contains ["X-Spam"] "Yes",
header :contains ["Subject"] "*** SPAM ***"
)
{
fileinto :create "Spam";
stop;
}
Dann erstellen wir ein Skript mit dem Namen /var/vmail/mail/sieve/global/report-spam.sieve
, das jedes Mal ausgelöst wird, wenn eine E-Mail manuell in den Spam-Ordner verschoben wird.
require ["vnd.dovecot.pipe", "copy", "imapsieve"];
pipe :copy "rspamc" ["learn_spam"];
Dann erstellen wir ein Skript mit dem Namen /var/vmail/mail/sieve/global/report-ham.sieve
, das jedes Mal ausgelöst wird, wenn eine E-Mail aus dem Spamordner verschoben wird.
require ["vnd.dovecot.pipe", "copy", "imapsieve"];
pipe :copy "rspamc" ["learn_ham"];
Nun kompilieren wir noch die Sieve-Skripte und setzen die Berechtigungen.
sievec /var/vmail/mail/sieve/global/spam-global.sieve
sievec /var/vmail/mail/sieve/global/report-spam.sieve
sievec /var/vmail/mail/sieve/global/report-ham.sieve
chown -R vmail: /var/vmail/mail/sieve/
DKIM-Schlüssel erstellen
DomainKeys Identified Mail (DKIM) ist eine E-Mail-Authentifizierungsmethode, die dazu dient, E-Mail-Spoofing zu erkennen. Sie ermöglicht es dem empfangenden Server, die Herkunft einer E-Mail zu überprüfen, indem er sie mit einer digitalen Signatur versieht. Die Überprüfung der Signatur erfolgt anhand des im DNS veröffentlichten öffentlichen Schlüssels des Unterzeichners. Damit lassen sich betrügerische E-Mails erkennen.
1. Version mit einem DKIM Schlüssel für alle Domains
Wir legen ein neues Verzeichnis zum Speichern des DKIM-Schlüssels an und erzeugen ein neues DKIM-Schlüsselpaar mit dem Dienstprogramm rspamadm. Im folgenden Beispiel verwenden wir dkim als DKIM-Selektor. Es wird ein Schlüsselpaar erzeugt, das für alle vom Mailserver verwalteten Domänen verwendet werden kann.
mkdir /var/lib/rspamd/dkim/
rspamadm dkim_keygen -b 2048 -s dkim -k /var/lib/rspamd/dkim/dkim.key > /var/lib/rspamd/dkim/dkim.pub
In diesem Verzeichnis finden Sie zwei Dateien:
- dkim.key - Die Datei des privaten Schlüssels
- dkim.pub - Die Datei mit dem öffentlichen Schlüssel
Wir erstellen nun eine neue Datei /etc/rspamd/local.d/dkim_signing.conf
, um Rspamd mitzuteilen, wo es nach dem DKIM-Schlüssel und dem Selektornamen suchen soll. Die letzte Zeile aktiviert die DKIM-Signierung für Alias-Absenderadressen.
selector = "mail";
path = "/var/lib/rspamd/dkim/$selector.key";
allow_username_mismatch = true;
2. Version mit einem DKIM Schlüssel für jede einzelne Domains
Möchen wir für jede Email Domain einen eigenen DKIM Schlüssel, müssen wir auch mehrer erstellen. In diesem Beispiel erstellen wir für die Domains tuxnet24.de, tuxnet24.net und tuxnet24.org einen DKIM Schlüssel wie folgt.
rspamadm dkim_keygen -b 2048 -s dkim -k /var/lib/rspamd/dkim/dkim.tanczo.de.key > /var/lib/rspamd/dkim/dkim.tanczo.de.pub
rspamadm dkim_keygen -b 2048 -s dkim -k /var/lib/rspamd/dkim/dkim.tanczo.net.key > /var/lib/rspamd/dkim/dkim.tanczo.net.pub
rspamadm dkim_keygen -b 2048 -s dkim -k /var/lib/rspamd/dkim/dkim.tanczo.org.key > /var/lib/rspamd/dkim/dkim.tanczo.org.pub
Wir erstellen nun eine neue Datei /etc/rspamd/local.d/dkim_signing.conf
, um Rspamd mitzuteilen, wo es nach dem DKIM-Schlüssel und dem Selektornamen suchen soll.
try_fallback = false;
allow_username_mismatch = true;
domain {
# Domain name tuxnet24.de is used as key
tuxnet24.de {
# Private key path
path = "/var/lib/rspamd/dkim/dkim.tuxnet24.de.key";
# Selector name
selector = "dkim";
}
# Domain name tuxnet24.net is used as key
tuxnet24.net {
# Private key path
path = "/var/lib/rspamd/dkim/dkim.tuxnet24.net.key";
# Selector name
selector = "dkim";
}
# Domain name tuxnet24.org is used as key
tuxnet24.org {
# Private key path
path = "/var/lib/rspamd/dkim/dkim.tuxnet24.org.key";
# Selector name
selector = "dkim";
}
}
Hinweis
Ab hier gilt die Konfiguration wieder für beide Versionen!
Rspamd unterstützt auch ARC-Signaturen. Wir verwenden die gleiche Konfigurationsdatei und kopieren diese.
cp /etc/rspamd/local.d/dkim_signing.conf /etc/rspamd/local.d/arc.conf
Nun starten wir den Rspamd neu.
systemctl restart rspamd